iT邦幫忙

DAY 25
0

21世紀C語言實作及感想系列 第 25

21世紀C語言之25:Auto Tools (2)

  • 分享至 

  • xImage
  •  

昨晚在編configure.ac 設定檔時,

用到sed 指令,

sed 在批次指令更新檔案時,是很好用的工具,而且有很長歷史的編輯小工具。

原來檔案是這樣:

-*- Autoconf -*-

Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])

Checks for programs.

AC_PROG_CC

經過sed指令更換及加一行

sed -e 's/FULL-PACKAGE-NAME/hello/' \
-e 's/VERSION/1/'
\
-e 's|BUG-REPORT-ADDRESS|/dev/null|' \
-e '10i\
AM_INIT_AUTOMAKE' \
< configure.scan > configure.ac

結果變成

AC_PREREQ([2.69])
AC_INIT([hello], [1], [/dev/null])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])

Checks for programs.

AM_INIT_AUTOMAKE
AC_PROG_CC

10i , 是在第10列,insert 1列文字。

將源碼打包,make distcheck,

會產生一個hello-1.tar.gz。

而這個源碼包,就可以發布給其他人用三步驟來安裝了。

經過前人不斷的簡化再簡化,只要編2個設定檔,下4個指令,就可以產生跨平台的源碼包,簡直是自動化編程的一個很高的境界。

這類程式產生的makefile,比寫程式複雜多了。

對程式可以跨平台,起了很大的作用。


automake 設定檔的內容

小寫_大寫的規則,

bin_PROGRAMS ,變成執行檔的程式名
check_PROGRAMS, 要檢查的程式
include_HEADERS, 安裝在系統的include 目錄的標頭檔
lib_LTLIBRARIES , 利用Libtool產生的動態庫
noinst_LIBRARIES, 靜態庫

.................................

一個複雜點的例子,加上測試

AM_CFLAGS=pkg-config --cflags glib-2.0 -O3 -Wall

lib_LTLIBRARIES=libdict.la
libdict_la_SOURCES=dict.c keyval.c

include_HEADERS=keyval.h dict.h

bin_PROGRAMS=dict_use
dict_use_SOURCES=dict_use.c
dict_use_LDADD=libdict.la

TESTS=$(check_PROGRAMS)
check_PROGRAMS=dict_test
dict_test_LDADD=libdict.la


上一篇
21世紀C語言之24:Auto Tools
下一篇
21世紀C語言之26:Auto Tools (3)
系列文
21世紀C語言實作及感想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言